package ljl.alg.wangzheng_camp.round1.recursive;

public class _offer_16_pow {
    
    public double myPow(double x, int n) {
        if (n < 0) {
            x = -x;
            /*
            * 我去你妈的
            * 太鸡巴阴了你这个 edge case
            * */
            if (n == Integer.MIN_VALUE) {
                x *= x;
                n = -(n + 1);
            } else n = -n;
        }
        double res = 1;
        while (n > 0) {
            if ((n & 1) == 1) {
                res *= x;
                n--;
            }
            x *= x;
            n >>=1;
        }
        return res;
    }
}
